import Crc from '../ble_sdk/crc'
import {
	BleManager
} from '../ble_sdk/er2'
import {
	formatNum,
	dec2hex,
	hex2dec,
	hex2ascll,
	parseShort
} from '../util'

const fs = wx.getFileSystemManager()

module.exports = class ER2Protocol extends BleManager {
	streamNo = 0 // 指令流水号
	cmdRecord = '' // 记录上位机给设备端发送的指令，用来和接收的数据包做对应
	reversedCmdRecord = '' // 同上
	datas = '' // 收到的设备端数据包全量
	oldCallbackData = '' // 上一次的数据包，用来判断是否是重复包
	deviceInfo = null // 存设备信息

	fileList = [] // 读到的设备文件列表
	fileData = [] // 当前读取文件的所有内容
	fileOffset = 0 // 当前读取文件的内容偏移量
	fileSize = 0 // 当前读取文件的大小
	downloadPercent = 0 // 当前读取文件的进度
	isReading = false // 当前是否正在读文件
	curFile = '' // 当前读取文件的内容
	oneFileReadDone = false // 一个文件读完
	fileDownloaded = 0 // 当前下载完成的文件数
	readFileTimer = null // 读文件的定时器

	heartBeatSoundOn = false // 当前设备的心跳音状态
	deviceRunInfo = null // 当前设备的运行状态
	allWaveData = [] // 本次测量的所有波形数据
	waveDataArray = [] // 当前的波形
	reset = 1 // ？？
	EcgCmdTimer = null // 发送实时心电指令的timer，500ms
	drawEcgTimer = null // 绘制心电图的timer，50ms
	isTesting = false // 当前是否正在测量
	bpm = null; //心率
	contactedStatus = ''
	connectionState = false //连接状态
	constructor(Device) {
		super(Device)
	}


	// 解析接受到的设备端数据包
	parseData(res) {
		this.datas = res
		let start = this.datas.startsWith('06') // a5标志一次完整数据包的开始，正确情况下start都是0
		if (start) { // 说明有一个数据包来了
			this.contactedStatus = '06'
			this.parseECGData2(this.datas)
		} else if (this.datas.startsWith('01') || this.datas.startsWith('11')) {
			this.isTesting = false;
			this.waveDataArray = [];
			this.allWaveData = [];
			// this.contactedStatus = this.datas.startsWith('01') ? '未连接' : '连接异常'
			this.contactedStatus = this.datas.startsWith('01') ? '01' : '02'
		}
	}
	parseBPMData(res) {
		console.log('心率数据', res)
		let start = res.startsWith('06') // a5标志一次完整数据包的开始，正确情况下start都是0
		if (start) { // 说明有一个数据包来了
			const bpm = res.slice(2, 4);
			this.bpm = parseInt(bpm, 16)
		} else {
			this.bpm = 0;
		}
	}
	parseECGData2(data) {
		this.isTesting = true;
		const ecgData = [];
		const len = (data.length - 2) / 12;
		for (let i = 0; i < len; i++) {
			const index = 1 + i * 6;
			const timestr = data.slice(index * 2, (index + 4) * 2);
			const ecgValue = data.slice((index + 4) * 2, (index + 6) * 2);
			if (timestr && ecgValue) {
				const timestamp = parseInt(timestr, 16)
				const ecgValue2 = parseShort(parseInt(ecgValue, 16)) / 256
				this.waveDataArray.push(ecgValue2)
				this.allWaveData.push(ecgValue2)
			}

		}

	}
	drawEcg() {
		let list = this.waveDataArray.splice(0, 50);
		return list;
	}
	saveEcgList() {
		let list = this.allWaveData.splice(0, 3000);
		return list;
	}
}

function waveFilter(data) {
	// 这里只简单设置阈值[-3, 3]
	return Math.abs(data) > 3 ? (data / Math.abs(data) * 3) : data
}